package com.hxh.generater.springBoot.springboot3_vue3.gen;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.hxh.entity.TemplateConfig;
import com.hxh.entity.po.ClassInfo;
import com.hxh.generater.springBoot.genBase.GenCRUDTools;
import com.hxh.generater.vue.springboot3_vue3.gen.GenSb3Vue3ApiRemote;
import com.hxh.generater.vue.springboot3_vue3.gen.GenSb3Vue3ViewRemote;

import java.io.IOException;

/**
 * 根据表生成所有crud代码的类
 * <p>
 * 小工具，可以不实现
 */
public class GenSb3Vue3CRUDTools implements GenCRUDTools {
    /**
     * 生成某个表的所有crud代码
     *
     * @param packageName
     * @param classInfo
     * @return
     * @throws IOException
     */
    @Override
    public JSONArray process(String packageName, ClassInfo classInfo, TemplateConfig templateConfig) throws Exception {
        JSONArray jsonArray = new JSONArray();

        GenSb3Vue3TableCRUD genSb3Vue3TableCRUD = new GenSb3Vue3TableCRUD();

        String entityClass = genSb3Vue3TableCRUD.generationEntity(packageName, classInfo, templateConfig);
        JSONObject entityJson = new JSONObject();
        entityJson.put("name", "entity");
        entityJson.put("code", entityClass);
        entityJson.put("type", "java");
        jsonArray.add(entityJson);

        String entityInputClass = genSb3Vue3TableCRUD.generationEntityInput(packageName, classInfo, templateConfig);
        JSONObject entityInputJson = new JSONObject();
        entityInputJson.put("name", "entityInput");
        entityInputJson.put("code", entityInputClass);
        entityInputJson.put("type", "java");
        jsonArray.add(entityInputJson);

        String mapper = genSb3Vue3TableCRUD.generationMapper(packageName, classInfo, templateConfig);
        JSONObject mapperJson = new JSONObject();
        mapperJson.put("name", "mapper");
        mapperJson.put("code", mapper);
        mapperJson.put("type", "xml");
        jsonArray.add(mapperJson);

        String daoClass = genSb3Vue3TableCRUD.generationDaoClass(packageName, classInfo, templateConfig);
        JSONObject daoJson = new JSONObject();
        daoJson.put("name", "dao");
        daoJson.put("code", daoClass);
        daoJson.put("type", "java");
        jsonArray.add(daoJson);

        String serviceClass = genSb3Vue3TableCRUD.generationServiceClass(packageName, classInfo, templateConfig);
        JSONObject serviceJson = new JSONObject();
        serviceJson.put("name", "service");
        serviceJson.put("code", serviceClass);
        serviceJson.put("type", "java");
        jsonArray.add(serviceJson);

        String serviceImplClass = genSb3Vue3TableCRUD.generationServiceImplClass(packageName, classInfo, templateConfig);
        JSONObject serviceImplJson = new JSONObject();
        serviceImplJson.put("name", "serviceImpl");
        serviceImplJson.put("code", serviceImplClass);
        serviceImplJson.put("type", "java");
        jsonArray.add(serviceImplJson);

        String controllerClass = genSb3Vue3TableCRUD.generationControllerClass(packageName, classInfo, templateConfig);
        JSONObject controllerJson = new JSONObject();
        controllerJson.put("name", "controller");
        controllerJson.put("code", controllerClass);
        controllerJson.put("type", "java");
        jsonArray.add(controllerJson);

        String indexVue = GenSb3Vue3ViewRemote.generationIndexVue(classInfo, templateConfig);
        JSONObject indexVueJson = new JSONObject();
        indexVueJson.put("name", "indexVue");
        indexVueJson.put("code", indexVue);
        indexVueJson.put("type", "javascript");
        jsonArray.add(indexVueJson);

        String contentVue = GenSb3Vue3ViewRemote.generationContent(classInfo, templateConfig);
        JSONObject contentVueJson = new JSONObject();
        contentVueJson.put("name", "contentVue");
        contentVueJson.put("code", contentVue);
        contentVueJson.put("type", "javascript");
        jsonArray.add(contentVueJson);

        String searchVue = GenSb3Vue3ViewRemote.generationSearch(classInfo, templateConfig);
        JSONObject searchVueJson = new JSONObject();
        searchVueJson.put("name", "searchVue");
        searchVueJson.put("code", searchVue);
        searchVueJson.put("type", "javascript");
        jsonArray.add(searchVueJson);

        String addVue = GenSb3Vue3ViewRemote.generationAdd(classInfo, templateConfig);
        JSONObject addVueJson = new JSONObject();
        addVueJson.put("name", "addVue");
        addVueJson.put("code", addVue);
        addVueJson.put("type", "javascript");
        jsonArray.add(addVueJson);

        String editVue = GenSb3Vue3ViewRemote.generationEdit(classInfo, templateConfig);
        JSONObject editVueJson = new JSONObject();
        editVueJson.put("name", "editVue");
        editVueJson.put("code", editVue);
        editVueJson.put("type", "javascript");
        jsonArray.add(editVueJson);

        String apiModel = GenSb3Vue3ApiRemote.generationApiModel(classInfo, templateConfig);
        JSONObject apiModelJson = new JSONObject();
        apiModelJson.put("name", "apiModel");
        apiModelJson.put("code", apiModel);
        apiModelJson.put("type", "javascript");
        jsonArray.add(apiModelJson);

        String apiIndex = GenSb3Vue3ApiRemote.generationApiIndex(classInfo, templateConfig);
        JSONObject apiIndexJson = new JSONObject();
        apiIndexJson.put("name", "apiIndex");
        apiIndexJson.put("code", apiIndex);
        apiIndexJson.put("type", "javascript");
        jsonArray.add(apiIndexJson);

        return jsonArray;
    }
}
